package com.heu.blood.storge.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.heu.blood.common.utils.PageUtils;
import com.heu.blood.match.entity.BloodInformationEntity;
import com.heu.blood.storge.entity.BloodInStorgeEntity;
import com.heu.blood.storge.vo.BloodDeleteReturnVo;
import com.heu.blood.storge.vo.BloodInformationAndInStorageVo;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 *
 *
 * @author lyj
 * @email lyj@heu.com
 * @date 2023-06-16 00:33:53
 */
public interface BloodInStorgeService extends IService<BloodInStorgeEntity> {

    //入库查询
    PageUtils queryPage(Map<String, Object> params);

    //入库操作

    int insertInStorge(BloodInStorgeEntity bloodInStorgeEntity);

    //根据血液id 更改入库血液状态

    boolean updateInStorgeBloodStatebyBloodId(String BloodId, String state);

    //根据入库对象修改的字段同步bloodinformation表的字段

    boolean updateBloodInformationByBloodId(BloodInStorgeEntity bloodInStorgeEntity);

    //批量入库

    boolean batchInsertWithVerify(List<BloodInStorgeEntity> bloodInStorgeEntityList);

    //根据excel后获取解析后的List集合
    List<Map> getListByExcel(InputStream is, String fileName);
    //根据获取的list增加到数据库中
    Boolean batchImportBloodInformationInfo(List<Map> bloodInformationList);

    BloodInStorgeEntity converMaptoInStorgeEntity(Map bloodInformationMap);

    //统计血液入库数量
    Integer inStorgeNum();

    //新的入库接口
    // 从excel表批量导入血液信息数据
    void importExcel(MultipartFile multipartFile);


    //根据血液id数组修改入库表血液状态为在库状态
    void BatchUpdateBloodStateInStockForInstorge(String[] bloodids);
    //根据血液id数组修改入库表血液状态为退血状态
    void BatchUpdateBloodReturnStateForInstorge(String[] bloodids);

    /**
     * 前端传递blood_id 向血液信息表里面塞入这条血液信息 同时更改两个在库状态
     * @param bloodId
     */
    void insertOneInformationToBloodInformationFromBloodInStorgeByBloodId(String bloodId);
    /**
     * 将入库对象转变为血液信息对象
     */
    BloodInformationEntity convertBloodInStorgeToBloodInformation(BloodInStorgeEntity bloodInStorgeEntity);

    /**
     * 前端传递blood ids 将血液信息表里面塞入
     * @param bloodIds
     */
    void InsertMultiplyInformationToBloodInformationFromBloodInStorgeByBLoodId(String[] bloodIds);
    /**
     * 避免检验，直接进行单条血液入库，并更新为血液在库状况
     * @param bloodInformationAndInStorageVo
     * @return 成功标志
     */
    int insertWithoutVerify(BloodInformationAndInStorageVo bloodInformationAndInStorageVo);

    /**
     * 避免检验，直接进行批量血液入库，并更新为血液在库状况
     * @param bloodInformationAndInStorageVos
     * @return
     */
    int batchInsertWithoutVerify(List<BloodInformationAndInStorageVo> bloodInformationAndInStorageVos);

    BloodInStorgeEntity queryStorageByBloodId(String bloodId);

    int cascadeDelete(BloodDeleteReturnVo vo);
}

